package com.wawu.common.utils.SQLBuilder;

import java.util.ArrayList;
import java.util.List;

//TODO 细看：本处涉及到的代码都需要再次细看
//TODO 待完成：更新操作最好别用动态sql

/**
 * 此处必须是要按顺序构造，不然肯定是有问题的
 */
public abstract class BaseSQLBuilder {
    protected final StringBuilder sql;
    protected final List<Object> params;
    private boolean whereAdded = false;  // 标记是否已添加 WHERE 条件

    public BaseSQLBuilder(String baseQuery) {
        this.sql = new StringBuilder(baseQuery);
        this.params = new ArrayList<>();
    }

    /**
     * 添加通用条件
     */
    public BaseSQLBuilder addDynamicCondition(String fieldName, String operator, Object value) {
        if (value != null) {
            if (!whereAdded) { // 如果是第一个条件，添加 WHERE
                sql.append(" WHERE ");
                whereAdded = true;
            } else { // 后续的条件添加 AND
                sql.append(" AND ");
            }
            sql.append(fieldName).append(" ").append(operator).append(" ?");
            params.add("LIKE".equalsIgnoreCase(operator) ? "%" + value + "%" : value);
        }
        return this;
    }

    /**
     * 添加 IN 条件
     */
    public BaseSQLBuilder addInCondition(String fieldName, List<?> values) {
        if (values != null && !values.isEmpty()) {
            if (!whereAdded) { // 如果是第一个条件，添加 WHERE
                sql.append(" WHERE ");
                whereAdded = true;
            } else { // 后续的条件添加 AND
                sql.append(" AND ");
            }
            sql.append(fieldName).append(" IN (");
            for (int i = 0; i < values.size(); i++) {
                sql.append("?");
                if (i < values.size() - 1) sql.append(", ");
            }
            sql.append(")");
            params.addAll(values);
        }
        return this;
    }

    /**
     * 添加 BETWEEN 条件
     */
    public BaseSQLBuilder addBetweenCondition(String fieldName, Object start, Object end) {
        if (start != null && end != null) {
            if (!whereAdded) { // 如果是第一个条件，添加 WHERE
                sql.append(" WHERE ");
                whereAdded = true;
            } else { // 后续的条件添加 AND
                sql.append(" AND ");
            }
            sql.append(fieldName).append(" BETWEEN ? AND ?");
            params.add(start);
            params.add(end);
        }
        return this;
    }

    /**
     * 获取 SQL 语句
     */
    public String getSQL() {
        System.out.println(sql.toString());
        System.out.println(params);
        return sql.toString();
    }

    /**
     * 获取参数数组
     */
    public Object[] getParams() {
        return params.toArray();
    }

}